From 548d3db74fc367ad04962865869786ce0eeaaf78 Mon Sep 17 00:00:00 2001 From: oliskoli Date: Wed, 5 Apr 2006 17:59:22 +0000 Subject: [PATCH] Add special functions for hard-coded characters. --- gpsbabel/cet_util.c | 55 ++++++++++++++++++++++++++++++++++++++++++++- gpsbabel/cet_util.h | 3 +++ 2 files changed, 57 insertions(+), 1 deletion(-) diff --git a/gpsbabel/cet_util.c b/gpsbabel/cet_util.c index b3a07ef68..a208f194b 100644 --- a/gpsbabel/cet_util.c +++ b/gpsbabel/cet_util.c @@ -904,7 +904,6 @@ cet_convert_init(const char *cs_name, const int force) } } - /* -------------------------------------------------------------------- */ /* %%% complete data strings transformation %%% */ /* -------------------------------------------------------------------- */ @@ -971,6 +970,7 @@ cet_convert_route_hdr(const route_head *route) rte->rte_name = cet_convert_string(route->rte_name); rte->rte_desc = cet_convert_string(route->rte_desc); + rte->rte_url = cet_convert_string(route->rte_url); } /* cet_convert_route_tlr: internal used within cet_convert_strings process */ @@ -1086,3 +1086,56 @@ cet_disp_character_set_names(FILE *fout) fprintf(fout, "We have %d builtin character sets with %d aliases!\n", c, ac); xfree(list); } + +/* %%% cet_fprintf / cet_vfprintf %%% + * + * - print any special hard-coded characters from inside a module - */ + +int cet_vfprintf(FILE *stream, const cet_cs_vec_t *src_vec, const char *fmt, va_list args) +{ + char buff[128]; + char *cout = buff; + int res, ct; + va_list args2; /* vsnprintf makes args unusable for a second try */ + + va_copy(args2, args); + ct = vsnprintf(buff, sizeof(buff), fmt, args); + if (ct >= (int)sizeof(buff)) { + cout = xmalloc(ct + 1); + vsnprintf(cout, ct + 1, fmt, args2); + } + va_end(args2); + + if (global_opts.charset != src_vec) + { + if (src_vec != &cet_cs_vec_utf8) + { + char *ctemp = cet_str_any_to_utf8(cout, src_vec); + if (cout != buff) xfree(cout); + cout = ctemp; + } + if (global_opts.charset != &cet_cs_vec_utf8) + { + char *ctemp = cet_str_utf8_to_any(cout, global_opts.charset); + if (cout != buff) xfree(cout); + cout = ctemp; + } + } + + res = fprintf(stream, "%s", cout); + if (cout != buff) xfree(cout); + + return res; +} + +int cet_fprintf(FILE *stream, const cet_cs_vec_t *src_vec, const char *fmt, ...) +{ + int res; + va_list args; + + va_start(args, fmt); + res = cet_vfprintf(stream, src_vec, fmt, args); + va_end(args); + + return res; +} diff --git a/gpsbabel/cet_util.h b/gpsbabel/cet_util.h index e1c2aac4f..402f76412 100644 --- a/gpsbabel/cet_util.h +++ b/gpsbabel/cet_util.h @@ -96,6 +96,9 @@ char *cet_str_uni_to_any(const short *src, int length, const cet_cs_vec_t *dest_ char *cet_str_any_to_any(const char *src, const cet_cs_vec_t *src_vec, const cet_cs_vec_t *dest_vec); int cet_valid_char(const char *src, const cet_cs_vec_t *vec); +int cet_vfprintf(FILE *stream, const cet_cs_vec_t *src_vec, const char *fmt, va_list args); +int cet_fprintf(FILE *stream, const cet_cs_vec_t *src_vec, const char *fmt, ...); + /* gpsbabel extensions */ void cet_convert_init(const char *cs_name, const int force); -- 2.30.2